package models.dados;

import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import models.Administrador;
import models.Cliente;
import models.Pedido;
import models.Produto;
import models.TipoUsuario;

public class BancoAdapter implements DAO {
	
	private static DAO banco;
	private static BancoAdapter unicaInstancia;
	
	public BancoAdapter(){
		banco = BancoTeste.getInstancia();
	}
	
	public static DAO getInstancia(){
		if (unicaInstancia==null){
			
			unicaInstancia = new BancoAdapter();
			
			return unicaInstancia;
		}else{
			return unicaInstancia;
		}
	}

	@Override
	public Cliente getClienteCadastrado(String nomeUsuario)
			throws DadoNaoEncontradoException {
		return banco.getClienteCadastrado(nomeUsuario);
	}

	@Override
	public Cliente getClienteNaoCadastrado(String nome)
			throws DadoNaoEncontradoException {
		return banco.getClienteNaoCadastrado(nome);
	}

	@Override
	public Administrador getAdministrador(String nomeUsuario)
			throws DadoNaoEncontradoException, SQLException {
		return banco.getAdministrador(nomeUsuario);
	}

	@Override
	public Pedido getPedido(long numero) throws DadoNaoEncontradoException {
		return banco.getPedido(numero);
	}

	@Override
	public Produto getProduto(String nome) throws DadoNaoEncontradoException {
		return banco.getProduto(nome);
	}

	@Override
	public void inserirCliente(Cliente cliente) throws ChaveRepetidaException {
		banco.inserirCliente(cliente);
		
	}

	@Override
	public void inserirPedido(Pedido pedido) throws ChaveRepetidaException {
		banco.inserirPedido(pedido);
		
	}

	@Override
	public void inserirAdministrador(Administrador administrador)
			throws ChaveRepetidaException, SQLException {
		banco.inserirAdministrador(administrador);
		
	}

	@Override
	public void inserir(Produto donut) throws ChaveRepetidaException, SQLException {
		banco.inserir(donut);
		
	}

	@Override
	public void removerCliente(String nomeUsuario)
			throws DadoNaoEncontradoException {
		banco.removerCliente(nomeUsuario);
		
	}

	@Override
	public void removerPedido(Pedido pedido) throws DadoNaoEncontradoException {
		banco.removerPedido(pedido);
		
	}

	@Override
	public void removerAdministrador(String nomeUsuario)
			throws DadoNaoEncontradoException {
		banco.removerAdministrador(nomeUsuario);
		
	}

	@Override
	public void removerProduto(String tipo, String marca, String nome)
			throws DadoNaoEncontradoException {
		banco.removerProduto(tipo, marca, nome);
		
	}

	@Override
	public void removerProduto(String nome) {
		banco.removerProduto(nome);
		
	}

	@Override
	public void alterarCliente(Cliente cliente) {
		banco.alterarCliente(cliente);
		
	}

	@Override
	public void alterarPedido(Pedido pedido) {
		banco.alterarPedido(pedido);
		
	}

	@Override
	public void alterarAdministrador(Administrador administrador) {
		banco.alterarAdministrador(administrador);
		
	}

	@Override
	public void alterarProduto(Produto produto) {
		banco.alterarProduto(produto);
		
	}



	




	@Override
	public List<Produto> listarProdutos() throws SQLException {
		return banco.listarProdutos();
	}

	@Override
	public List<Produto> listarProdutos(String tipo) {
		// TODO Auto-generated method stub
		return banco.listarProdutos(tipo);
	}

	@Override
	public List<Pedido> listarPedidos( long numero,String usuarioCliente,
			String nomeCliente,
			GregorianCalendar DataExata, GregorianCalendar dataInicial,
			GregorianCalendar dataFinal, String status,
			String usuarioUltimaAlteracao,GregorianCalendar dataUltimaAlteracao) {
		
		return banco.listarPedidos(numero,usuarioCliente,nomeCliente, DataExata, dataInicial, dataFinal, status, usuarioUltimaAlteracao, dataUltimaAlteracao);
	
	}

	@Override
	public List<Administrador> listarAdministradores(String usuario,
			TipoUsuario tipo, String cadastradoPor, Calendar DataCadastro,
			boolean bloqueado,boolean naoBloqueado,boolean ativo,boolean inativo) {
		return banco.listarAdministradores(usuario, tipo, cadastradoPor, DataCadastro, bloqueado,naoBloqueado,ativo,inativo);
	}

	@Override
	public List<Cliente> listarClientes(String nomeUsuario, String nome,
			Calendar dataCadastro,Calendar dataCadastroInicial,Calendar dataCadastroFinal, boolean bloqueado,boolean naoBloqueado, boolean ehCadastrado,boolean naoCadastrado) {
		// TODO Auto-generated method stub
		return banco.listarClientes(nomeUsuario, nome, dataCadastro,dataCadastroInicial,dataCadastroFinal, bloqueado,naoBloqueado, ehCadastrado,naoCadastrado);
	}



}
